<?php
	class Metodos
	{
		protected $Error;
		protected $ErrorMsg;
		
		
		public function __construct()
		{
			$this->Error    = true;
			$this->ErrorMsg = "";
		}
		
		
		public function GetError()
		{
			return $this->Error;
		}
		
		
		public function GetErrorMsg()
		{
			return $this->ErrorMsg;
		}
		

		/**************************************************************************************
											CRIPTOGRAFIA
		**************************************************************************************/
		
		/*
		//REALIZANDO A CRIPTOGRAFIA EM MD5, BYTE A BYTE
		*/
		public function Criptografar($_value)
		{
			$_value = trim($_value);			
			for($i = 0; $i < strlen($_value); $i++)
			{
				$_senha = md5($_senha . $_value[$i]);
			}
			
			return md5(md5(md5($_senha)));
		}		
		
		 
		/*
		//CRIPTOGRAFIA E DESCRIPTOGRAFIA BASE64
		//OBS: SEMPRE DEIXAR O MESMO NUMERO LOOPING EM AMBOS OS METODOS  
		*/
		public function CriptografarBase64($str)
		{
			for($i = 0; $i < 5; $i++)  
			{
				$str = strrev(base64_encode($str)); //CRIPTOGRAFAR BASE64 
			}
			return $str;
	    }		
	    
	    public function DescriptografarBase64($str)
		{
			for($i = 0; $i < 5; $i++)
			{
				$str =   base64_decode(strrev($str)); //DECRIPTOGRAFAR BASE64 
			}
			return $str;
	    }
		
		
		/*
		//REMOVE POSSIVEIS PALAVRAS E SIMBOLOS DE INVASAO
		*/
		public function RemoverInjection($_value)
		{
			$_value = trim($_value);//REMOVE ESPACO VAZIO
			$_value = strip_tags($_value);//REMOVE TAGS HTML E PHP
			$_value = addslashes($_value);//ADICIONA BARRAS INVERTIDAS A UMA STRING
			$_value = preg_replace("/(from|select|insert|delete|where|drop table|drop |show tables|#|\*|--|\\\\)/i","",$_value); 
			
			return $_value;
		}
		
		
		
		
		
		/**************************************************************************************
									VALIDAR ENTRADA DE DADOS
		**************************************************************************************/
		
		public function ValidarVazio($_value, $_campo)
		{			
			if(empty($_value))
			{
				$this->ErrorMsg = "Por favor, preencha o campo <span>".$_campo."</span>";
				$this->Error    = true;
			}
			else						
				return $_value;			
		}
		
		
		/*
		//DELIMITA O MAXIMO DE CARACTERES E ACEITA NULO
		*/
		public function ValidarTamanhoMaximo($_maximo,$_value,$_campo)
		{
			$_value = trim($_value);
			
			if(strlen($_value) > $_maximo)
			{
				$this->ErrorMsg = "Campo <span>".$_campo."</span> deve ter no máximo ".$_maximo." caracteres";
				$this->Error    = true;
				return $_value;
			}
			else
			{
				$_value = stripslashes($_value);
				return addslashes($_value);
			}
		}
		
		
		/*
		//DELIMITA O MINIMO DE CARACTERES E ACEITA NULO
		*/
		public function ValidarTamanhoMinimo($_minimo,$_value,$_campo)
		{
			$_value = trim($_value);
			
			if(strlen($_value) > $_minimo)
			{
				$this->ErrorMsg = "Campo <span>".$_campo."</span> deve ter no mínimo ".$_minimo." caracteres";
				$this->Error    = true;
				return $_value;
			}
			else
			{
				$_value = stripslashes($_value);
				return addslashes($_value);
			}
		}
		
		
		/*
		//DELIMITA O MINIMO E O MAXIMO DE CARACTERES
		*/
		public function ValidarTamanho($_minimo,$_maximo, $_value, $_campo)
		{
			$_value = trim($_value);
			
			if(empty($_value))
			{
				$this->ErrorMsg = "Por favor, preencha o campo <span>".$_campo."</span>";
				$this->Error    = true;
				return $_value;
			}
			elseif($_maximo < strlen($_value))
			{
				$this->ErrorMsg = "Campo <span>".$_campo."</span> deve ter no máximo ".$_maximo." caracteres";
				$this->Error    = true;
				return $_value;
			} 
			elseif($_minimo > strlen($_value))
			{
				$this->ErrorMsg = "Campo <span>".$_campo."</span> deve ter no mínimo ".$_minimo." caracteres";
				$this->Error    = true;
				return $_value;
			}
			else
			{
				$_value = stripslashes($_value);		
				return addslashes($_value);
			}
		}
		
		
		/*
		//
		*/
		public function ValidarDropDown($_minimo,$_value,$_campo)
		{			
			if($_value == $_minimo)
			{
				$this->ErrorMsg = "Por favor, escolha uma opção no campo <span>".$_campo."</span>";
				$this->Error    = true;
			}
			else
				return $_value;
		}
		
		
		/*
		//VERIFICA SE O E-MAIL PASSADO E VALIDO
		*/
		public function ValidarEmail($_value)
		{
			$_value = trim($_value);			
			
			if(!preg_match("/^[a-z0-9_\.\-]+@[a-z0-9_\.\-]*[a-z0-9_\-]+\.[a-z]{2,4}$/", $_value)) 
			{
				$this->ErrorMsg = "Por favor, Insira um <span>E-MAIL</span> válido.";
				$this->Error    = true;
				return $_value;
			}
			else			
				return $_value;			
		}
		
		
		/*
		//VALIDA NUMERO, NAO ACEITA STRING
		*/
		public function ValidarNumero($_value,$_campo)
		{
			$_value = trim($_value);
			
			if(empty($_value))
			{				
				$this->ErrorMsg = "Por favor, preencha o campo <span>".$_campo."</span>";
				$this->Error    = true;
				return $_value;				
			}
			elseif(!is_numeric($_value))
			{
				$this->ErrorMsg = "Por favor, Insira apenas números no campo <span>".$_campo."</span>";
				$this->Error    = true;
				return $_value;
			}
			else 
				return $_value;
		}
		
		
		public function ValidarData($_valueData,$_condicao,$_dataCondicao,$_campo,$_campoCondicao)
		{
			if($_condicao == "<")
			{
				if($_valueData < $_dataCondicao)				
					return $_valueData;				
				else
				{
					$this->ErrorMsg = "O campo <span>".$_campo."</span> deve ser menor que <span>".$_campoCondicao."</span>";
					$this->Error    = true;
				}					
			}elseif($_condicao == "<=")	{
				if($_valueData <= $_dataCondicao)				
					return $_valueData;							
				else
				{
					$this->ErrorMsg = "O campo <span>".$_campo."</span> deve ser menor ou igual que <span>".$_campoCondicao."</span>";
					$this->Error    = true;
				}					
			}elseif($_condicao == "==")	{
				if($_valueData == $_dataCondicao)				
					return $_valueData;				
				else
				{
					$this->ErrorMsg = "O campo <span>".$_campo."</span> deve ser igual que <span>".$_campoCondicao."</span>";
					$this->Error    = true;
				}					
			}elseif($_condicao == ">")	{
				if($_valueData > $_dataCondicao)				
					return $_valueData;							
				else
				{
					$this->ErrorMsg = "O campo <span>".$_campo."</span> deve ser maior que <span>".$_campoCondicao."</span>";
					$this->Error    = true;
				}					
			}elseif($_condicao == ">=")	{
				if($_valueData >= $_dataCondicao)				
					return $_valueData;					
				else
				{
					$this->ErrorMsg = "O campo <span>".$_campo."</span> deve ser maior ou igual que <span>".$_campoCondicao."</span>";
					$this->Error    = true;
				}					
			}
		}
		

		
		/**************************************************************************************
									RETORNAR DADOS
		**************************************************************************************/

		
		/*
		//RETORNA MULTISELECT SEPARANDO VALORES POR VIRGULA
		*/
		public function RetornarMultiselect($_value, $_campo)
		{
			foreach($_value as $item)
			{								
				$id = $item."!";//COLOCO ! PORQUE NO FINAL DE CADA VOLTA DO FOREACH O PHP COLOCA PONTO(.)
				$id = str_replace(".!", ",", $id);//DAI EU TROCO O .! POR VAZIO
				$grupo_ids = $grupo_ids."".$id;
			}
			$grupo_ids = rtrim($grupo_ids,',');//REMOVE A ULTIMA VIRGULA DA SRING
			
			if(Empty($grupo_ids))
			{
				$this->ErrorMsg = "Por favor, escolha pelo menos uma opção no campo <span>".$_campo."</span>";
				$this->Error    = true;
			}else
				return $grupo_ids;

		}


		/*
		//RETORNA MULTISELECT SEPARANDO VALORES POR VIRGULA E COM ASPAS SIMPLES
		*/
		public function RetornarMultiselectAspas($_value, $_campo)
		{
			foreach($_value as $item)
			{								
				$id = $item."!";//COLOCO ! PORQUE NO FINAL DE CADA VOLTA DO FOREACH O PHP COLOCA PONTO(.)
				$id = str_replace(".!", "',", $id);//DAI EU TROCO O .! POR VAZIO
				$grupo_ids = $grupo_ids."'".$id;
			}
			$grupo_ids = rtrim($grupo_ids,',');//REMOVE A ULTIMA VIRGULA DA SRING
			
			if(Empty($grupo_ids))
			{
				$this->ErrorMsg = "Por favor, escolha pelo menos uma opção no campo <span>".$_campo."</span>";
				$this->Error    = true;
			}else
				return $grupo_ids;
						

		}
		
		
		public function ConverterData($data) 
		{
			$data = trim($data);
		    // Recebemos a data no formato: dd/mm/aaaa
		    // Convertemos a data para o formato: aaaa-mm-dd e vise-versa.
		 	$data_nova = implode(preg_match("~\/~", $data) == 0 ? "/" : "-", array_reverse(explode(preg_match("~\/~", $data) == 0 ? "-" : "/", $data)));		
		    
		    return str_replace("'","",$data_nova);
		}
		
		
		public function ConverterSimples($strData)
		{
			$_value = str_replace("-", "/", $strData);
			
			return $_value;
		}
		
		
		public function RetornarNomeMes($_value)
		{
			$_value = trim($_value);
			$mes = $_value;
		    switch ($mes) 
		    {
    			case "01": $mes = "Janeiro";   break;
		        case "02": $mes = "Fevereiro"; break;
		        case "03": $mes = "Março";     break;
		        case "04": $mes = "Abril";     break;
		        case "05": $mes = "Maio";      break;
		        case "06": $mes = "Junho";     break;
		        case "07": $mes = "Julho";     break;
		        case "08": $mes = "Agosto";    break;
		        case "09": $mes = "Setembro";  break;
		        case "10": $mes = "Outubro";   break;
		        case "11": $mes = "Novembro";  break;
		        case "12": $mes = "Dezembro";  break; 
		 	}
			
			return $mes;
		}
		
		
		
				
		/**************************************************************************************
									RETORNAR REGISTROS BANCO DE DADOS
		**************************************************************************************/		
		/*
		//CONTA QUANTOS REGISTROS UMA ENTIDADE POSSUI COM CONDICIONAL
		*/
		public function ContarRegistros($_entidade,$_condicional)
		{
			$query = mysql_query("SELECT COUNT(*) AS TOTAL FROM $_entidade $_condicional");
			$linha = mysql_fetch_array($query);
						
			return $linha["TOTAL"];
		}	
		
		
		public function UltimoInsertId()
		{
			$query_last_id = mysql_query("SELECT LAST_INSERT_ID() as last_id");
			$linha_last_id = mysql_fetch_array($query_last_id);
			
			return $linha_last_id['last_id'];
		}
		
		/*
		 * CARREGA UM INPUT DO TIPO SELECT
		 * obs: nome do input do tipo select é o mesmo nome da entidade do banco de dados
		 */	
		public function DropDown($_id, $tabela, $coluna_chave, $coluna_valor, $where, $order_by)
		{			
			$_query = mysql_query("SELECT $coluna_chave, $coluna_valor FROM $tabela $where $order_by");
			echo "<select name='$tabela' id='$tabela'>				      
				  	<option selected value='0'>SELECIONE</option>";						
					if($_id == '0')
					{
						while($_linha = mysql_fetch_array($_query))
						{
							echo "<option value='$_linha[$coluna_chave]'>".htmlentities($_linha[$coluna_valor])."</option>";
						}				
					}
					else
					{
						while($_linha = mysql_fetch_array($_query))
						{
							if($_id == $_linha[$coluna_chave])
								echo "<option selected value='$_linha[$coluna_chave]'>".htmlentities($_linha[$coluna_valor])."</option>";
							else
								echo "<option value='$_linha[$coluna_chave]'>".htmlentities($_linha[$coluna_valor])."</option>";
						}
					}
			echo "</select>";
		}
		
		//Traduzindo o error de SQL pelo número
		public function SqlError($_value, $_acao, $_nome)
		{
			switch($_value)	
			{		
				case 1062: //registro já existe, geralmente UNIQUE.
					return "<div class='notice warning'><span><strong>Atenção:</strong> este $_nome já está cadastrado!</span></div>";
					break;
				case 1064: //error de sintaxe na QUERY.
					return "<div class='notice error'><span><strong>Error</strong> ao $_acao. Problema na sintaxe.</span></div>";
					break;
				case 1146: //error nome da TABELA na QUERY não existe ou está escrito errado.
					return "<div class='notice error'><span><strong>Error</strong> ao $_acao. Problema no nome da tabela do banco de dados.</span></div>";
					break;
				case 1136: //número de colunas a mais ou a menos.
					return "<div class='notice error'><span><strong>Error</strong> ao $_acao. Número de colunas não coincidem.</span></div>";
					break;
				default:
					return "<div class='notice error'><span><strong>Error</strong> ao $_acao.</span></div>$_value".mysql_error();
					break;
			}
		}
		
		
				
		/**************************************************************************************
									UPLOAD
		**************************************************************************************/		

		/*
		//COMPARO A EXTENSÃO DO ARQUIVO
		*/
		public function UploadTipoArquivo($_extensao, $_tipo)
		{
			/*echo "extensao: $_extensao <br />";
			echo "tipo: $_tipo";*/
			if((eregi("^image\/(pjpeg|jpeg|png|gif|bmp)$", $_extensao)) && ($_tipo == "image"))			
				return true;
			elseif((eregi("^application\/(x-shockwave-flash)$", $_extensao)) && ($_tipo == "swf"))
				return true;
			elseif($_tipo == "all")
				return true;
			else
			{
				$this->ErrorMsg = "Este arquivo selecionado não é do tipo $_tipo.";
				$this->Error    = true;				
			}
		}
		
		
		/*
		//FAZ A VALIDAÇÃO PARA O UPLOAD DE ARQUIVO
		*/
		public function ValidarUpload($_arquivo, $_tipo_extensao, $_campo, $_obrigatorio)
		{
			switch($_arquivo['error'])
			{
				case 0:					
					$this->UploadTipoArquivo($_arquivo["type"], $_tipo_extensao); //verifica se a extensão do arquivo está correta.
					if($this->Error == false) 
						return $_arquivo;
					break;	
					
				case 1:
					$this->Error    = true;
		            $this->ErrorMsg = "O Tamanho do arquivo não é suportado pelo servidor!";	            
					break;
					
				case 2:
					$this->Error    = true;
		            $this->ErrorMsg = "Tamanho limite excedido.";	            
					break;
					
				case 3:
					$this->Error    = true;
		            $this->ErrorMsg = "O arquivo foi corrompido. Tente novamente!";	            
					break;
					
				case 4:
					if(($_obrigatorio == 'SIM') && ($_nome == "")) //caso o nome do arquivo seja igual a vazio e for obrigatório, o usuário está cadastrando
					{
						$this->ErrorMsg = "Por favor, selecione algum arquivo no campo <span>".$_campo."</span>";
						$this->Error    = true;
					}
					else //se cair nessa condicao, o usuario esta editando o conteudo mas nao a imagem, dai retorno o mesmo nome de entrada que foi passado como parametro para editar o nome antigo pelo mesmo nome antigo
						return NULL;											             
					break;
					
				default:;	
			}	
		}

		/*
		//FAZ UPLOAD DE ARQUIVO
		*/
		public function Upload($_arquivo, $_diretorio, $_gerar_nome)		
		{
			$_nome_arquivo = NULL;
			
			if($_gerar_nome == "SIM")
			{
				$extensao  = strtolower(strrchr($_arquivo["name"],"."));
				$novo_nome = rand(000000000,999999999);			
				$_nome_arquivo     = $novo_nome.$extensao;
			}
			else
				$_nome_arquivo = $_arquivo["name"];	
			
			if(@move_uploaded_file($_arquivo['tmp_name'], $_diretorio.$_nome_arquivo)) //Faz o upload da imagem						
				return $_nome_arquivo;			
			else
			{
				$this->ErrorMsg = "Falha ao fazer upload.";
				$this->Error    = true;
			}
		}
			
		//CÓDICO RÁPIDO
		
		//tag redirecionar
		//echo "<meta http-equiv='Refresh' content='0; url=index.php'>";		
	}
?>